package com.liu.com.liu.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//代理对象 实现抽象同一接口
//InvocationHandler是 一个抽象业务接口
public class DynamicProxy_Demo1 implements InvocationHandler {
    //被代理的对象,即真实对象为提高通用性，使用Object类型
    private Object factory;
    public Object getFactory(){
        return factory;
    }
    public void setFactory(Object factory){
        this.factory=factory;
    }
    //生成 增强后的代理对象
    public Object getProxyInstance(){
        return Proxy.newProxyInstance(factory.getClass().getClassLoader(),factory.getClass().getInterfaces(),this);
            //this  是InvocationHandler的实现,即DynamicProxy_Demo1类
    }


    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        dosomeThingBefore();
        Object ret = method.invoke(factory,args); //调用真实对象的方法 invoke()方法
        dosomeThingEnd();
        return ret;
    }
    //售后服务 (前置增强)
    private void dosomeThingEnd(){
        System.out.println("精美包装,一条龙服务！");
    }
    //    售前服务(前置增强)
    private void dosomeThingBefore(){
        System.out.println("根据您的需求，进行合理推荐一款合适您的产品");
    }

}
